﻿<?xml version="1.0" encoding="utf-8"?><Articles><Article><ArticlesID>668</ArticlesID><Title>C&amp;#225;ch Insert v&amp;#224; tạo bảng dữ liệu 'động' trong SQL Server</Title><Body>&amp;lt;p&amp;gt;Như ch&amp;amp;uacute;ng ta đ&amp;amp;atilde; biết đối với c&amp;amp;aacute;c hệ thống Logging th&amp;amp;igrave; dữ liệu lu&amp;amp;ocirc;n được cập nhật h&amp;amp;agrave;ng th&amp;amp;aacute;ng, h&amp;amp;agrave;ng ng&amp;amp;agrave;y v&amp;amp;igrave; vậy đ&amp;amp;ograve;i hỏi CSDL&amp;amp;nbsp;phải tương th&amp;amp;iacute;ch c&amp;amp;oacute; nghĩa l&amp;amp;agrave; Log trong th&amp;amp;aacute;ng n&amp;amp;agrave;o th&amp;amp;igrave; hệ thống sẽ Insert v&amp;amp;agrave;o th&amp;amp;aacute;ng đ&amp;amp;oacute; tương ứng tr&amp;amp;aacute;ng việc Insert nhiều trong c&amp;amp;ugrave;ng 1 bảng dẫn đến việc Select chậm khi trả về kết quả.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;V&amp;amp;igrave; vậy đối với Log của mỗi th&amp;amp;aacute;ng ch&amp;amp;uacute;ng ta sẽ tạo ra c&amp;amp;aacute;c bảng vd:&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Th&amp;amp;aacute;ng 1 năm 2010 hệ thống sẽ tự động tạo ra bảng &amp;lt;b&amp;gt;tbl_Month_1_2010 &amp;lt;br /&amp;gt;
&amp;lt;/b&amp;gt;Th&amp;amp;aacute;ng 2 năm 2010 hệ thống sẽ tự động tạo ra bảng &amp;lt;b&amp;gt;tbl_Month_2_2010&amp;lt;/b&amp;gt; &amp;lt;br /&amp;gt;
... &amp;lt;br /&amp;gt;
Th&amp;amp;aacute;ng 12 năm 2010 hệ thống sẽ tự động tạo ra bảng &amp;lt;b&amp;gt;tbl_Month_12_2010&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Như vậy l&amp;amp;agrave;m sao để hệ thống c&amp;amp;oacute; thể tự tạo ra c&amp;amp;aacute;c bảng tương ứng với năm v&amp;amp;agrave; th&amp;amp;aacute;ng như vậy ?&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Giải ph&amp;amp;aacute;p của t&amp;amp;ocirc;i l&amp;amp;agrave; sử dụng SQL&amp;amp;nbsp;Job trong SQL&amp;amp;nbsp;Server, c&amp;amp;aacute;i n&amp;amp;agrave;y bắt buộc bạn phải c&amp;amp;oacute; Full quyền Administrator tr&amp;amp;ecirc;n Server Database&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;C&amp;amp;aacute;c bước như sau:&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;B1: Trong SQL&amp;amp;nbsp;Server bạn k&amp;amp;eacute;o xuống dưới c&amp;amp;oacute; phần SQL&amp;amp;nbsp;Server Agent bạn phải Start n&amp;amp;oacute; l&amp;amp;ecirc;n nếu n&amp;amp;oacute; đang Stop&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Bạn click chuột phải v&amp;amp;agrave;o Jobs chọn New Job&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;img width=&amp;quot;358&amp;quot; height=&amp;quot;384&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;http://dev.meotom.net/Uploads/admin/2009/12/11/ScreenHunter_001.gif&amp;quot; /&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;B2:&amp;amp;nbsp;Tại đ&amp;amp;acirc;y bạn được y&amp;amp;ecirc;u cầu nhập Name:&amp;amp;nbsp;T&amp;amp;ecirc;n của Job ở đ&amp;amp;acirc;y t&amp;amp;ocirc;i chọn l&amp;amp;agrave; CreateTableLogging v&amp;amp;agrave; owner l&amp;amp;agrave; sa&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;img width=&amp;quot;553&amp;quot; height=&amp;quot;496&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;http://dev.meotom.net/Uploads/admin/2009/12/11/ScreenHunter_002.gif&amp;quot; /&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;B3: Sau khi ấn OK&amp;amp;nbsp;bạn chọn tiếp phần Steps v&amp;amp;agrave; bạn chọn New Step, tại đ&amp;amp;acirc;y bạn được y&amp;amp;ecirc;u cầu nhập Step Name t&amp;amp;ocirc;i chọn l&amp;amp;agrave; StepCreateTable v&amp;amp;agrave; Type l&amp;amp;agrave; Transact-SQL script (T-SQL) c&amp;amp;oacute; nghĩa l&amp;amp;agrave; chạy c&amp;amp;acirc;u lệnh SQL.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Bạn chọn tiếp Database l&amp;amp;agrave; t&amp;amp;ecirc;n Database bạn muốn thực thi&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Phần Command bạn g&amp;amp;otilde; c&amp;amp;acirc;u lệnh sau để tạo bảng động&amp;lt;/p&amp;gt;
&amp;lt;pre class=&amp;quot;brush: sql;&amp;quot; title=&amp;quot;code&amp;quot;&amp;gt;
DECLARE @strCreateTable AS VARCHAR(1000)
SET @strCreateTable = 'CREATE TABLE tbl_Month_'
SET @strCreateTable += Cast(MONTH(GETDATE()) as varchar)
SET @strCreateTable += '_'
SET @strCreateTable += Cast(YEAR(GETDATE()) as varchar)
SET @strCreateTable +='('
SET @strCreateTable +='ID int PRIMARY KEY IDENTITY,'
SET @strCreateTable +='Name nvarchar(50)'
SET @strCreateTable +=')'
--PRINT(@strCreateTable)
EXEC(@strCreateTable)&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;Sau đ&amp;amp;oacute; bạn ấn OK&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;img width=&amp;quot;553&amp;quot; height=&amp;quot;469&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;http://dev.meotom.net/Uploads/admin/2009/12/11/ScreenHunter_003(1).gif&amp;quot; /&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;B4: Tiếp đến bạn chọn phần Schedules (để đặt lịch chạy cho Job) ban chọn New Schedule ở đ&amp;amp;acirc;y bạn được y&amp;amp;ecirc;u cầu nhập Schedule Name cho Job t&amp;amp;ocirc;i chọn l&amp;amp;agrave; ScheduleCreateTable, Phần tần suất (Frequency) t&amp;amp;ocirc;i chọn Occurs chạy v&amp;amp;agrave;o ng&amp;amp;agrave;y 15 h&amp;amp;agrave;ng th&amp;amp;aacute;ng (Monthly) l&amp;amp;uacute;c 12h đ&amp;amp;ecirc;m.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;img width=&amp;quot;553&amp;quot; height=&amp;quot;475&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;http://dev.meotom.net/Uploads/admin/2009/12/11/ScreenHunter_004(1).gif&amp;quot; /&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;B5:&amp;amp;nbsp;sau đ&amp;amp;oacute; bạn ấn OK&amp;amp;nbsp;để ho&amp;amp;agrave;n tất việc đặt lịch chạy cho Job v&amp;amp;agrave; OK để ho&amp;amp;agrave;n tất Job&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;v&amp;amp;agrave; đ&amp;amp;acirc;y l&amp;amp;agrave; kết quả&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;img width=&amp;quot;358&amp;quot; height=&amp;quot;481&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;http://dev.meotom.net/Uploads/admin/2009/12/11/ScreenHunter_005.gif&amp;quot; /&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;B6: Để chắc l&amp;amp;agrave; Job của bạn c&amp;amp;oacute; chạy đ&amp;amp;uacute;ng hay kh&amp;amp;ocirc;ng th&amp;amp;igrave; bạn Click chuột phải v&amp;amp;agrave;o Job vừa tạo chọn Start Job at Step...&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;img width=&amp;quot;361&amp;quot; height=&amp;quot;484&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;http://dev.meotom.net/Uploads/admin/2009/12/11/ScreenHunter_006.gif&amp;quot; /&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;B7: Nếu n&amp;amp;oacute; b&amp;amp;aacute;o thế n&amp;amp;agrave;y th&amp;amp;igrave; c&amp;amp;oacute; nghĩa l&amp;amp;agrave; Job của bạn đ&amp;amp;atilde; chạy ch&amp;amp;iacute;nh x&amp;amp;aacute;c&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;img width=&amp;quot;400&amp;quot; height=&amp;quot;248&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;http://dev.meotom.net/Uploads/admin/2009/12/11/ScreenHunter_007(1).gif&amp;quot; /&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;B8:&amp;amp;nbsp;Kiểm tra&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;img width=&amp;quot;364&amp;quot; height=&amp;quot;480&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;http://dev.meotom.net/Uploads/admin/2009/12/11/ScreenHunter_008.gif&amp;quot; /&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Như vậy mới ho&amp;amp;agrave;n th&amp;amp;agrave;nh xong phần tạo bảng bước tiếp ch&amp;amp;uacute;ng ta phải insert v&amp;amp;agrave;o bảng đ&amp;amp;oacute; thế n&amp;amp;agrave;o&amp;lt;/p&amp;gt;
&amp;lt;pre class=&amp;quot;brush: sql;&amp;quot; title=&amp;quot;code&amp;quot;&amp;gt;
DECLARE @strValue AS NVARCHAR(50)
DECLARE @strSQL AS VARCHAR(1000)
SET @strValue = 'Justin___'
SET @strValue += Cast(GETDATE() as varchar)

SET @strSQL = 'INSERT INTO tbl_Month_'
SET @strSQL += Cast(MONTH(GETDATE()) as varchar)
SET @strSQL += '_'
SET @strSQL += Cast(YEAR(GETDATE()) as varchar)
SET @strSQL += '([Name]) VALUES('''
SET @strSQL += @strValue
SET @strSQL += ''')'
--PRINT(@strSQL)
EXEC(@strSQL)
&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;trong bảng &amp;lt;b&amp;gt;tbl_Month_xx_xxxx&amp;lt;/b&amp;gt;&amp;amp;nbsp; n&amp;amp;agrave;y t&amp;amp;ocirc;i c&amp;amp;oacute; 2 trường l&amp;amp;agrave; ID (tự tăng) v&amp;amp;agrave; Name &amp;lt;br /&amp;gt;
sau đ&amp;amp;oacute; t&amp;amp;ocirc;i insert test c&amp;amp;aacute;c gi&amp;amp;aacute; trị m&amp;amp;agrave; g&amp;amp;aacute;n trong biến @strValue l&amp;amp;agrave; &amp;amp;quot;Justin___&amp;amp;quot; + ng&amp;amp;agrave;y hiện tại &amp;lt;br /&amp;gt;
sau khi insert xong dữ liệu của t&amp;amp;ocirc;i sẽ l&amp;amp;agrave; thế n&amp;amp;agrave;y &amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
ID&amp;amp;nbsp;&amp;amp;nbsp; Name &amp;lt;br /&amp;gt;
6&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Justin___Dec 12 2009&amp;amp;nbsp; 9:25AM &amp;lt;br /&amp;gt;
7&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Justin___Dec 12 2009&amp;amp;nbsp; 9:25AM &amp;lt;br /&amp;gt;
8&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Justin___Dec 12 2009&amp;amp;nbsp; 9:25AM &amp;lt;br /&amp;gt;
9&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Justin___Dec 12 2009&amp;amp;nbsp; 9:25AM&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Justin@aspvn.net&amp;lt;/p&amp;gt;</Body><CommentEnabled>True</CommentEnabled><ViewCount>0</ViewCount><ReleaseDate>12/11/2009 8:23:39 PM</ReleaseDate><TotalComment>0</TotalComment><IsMedia>False</IsMedia><IsPicture>True</IsPicture><IsVote>True</IsVote><ArticlePassword /><PostVisible>0</PostVisible><ArticlePath>/2009/12/11/Cach-Insert-va-tao-bang-du-lieu-'dong'-trong-SQL-Server-29C</ArticlePath><Approved>True</Approved><ImagePath /><CategoryId>35</CategoryId><ArrayCatID>35|25</ArrayCatID></Article></Articles>